package py.com.sole.solesys;

import java.io.Serializable;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.primefaces.context.RequestContext;
import org.primefaces.event.SelectEvent;
import py.com.sole.dao.DaoFactory;
import py.com.sole.model.Ciudad;

@ManagedBean
@SessionScoped
public class CiudadBean implements Serializable {

  /**
   *
   */
  private static final long serialVersionUID = -4873747667246098929L;
  private int id;
  private String descripcion;
  private List<Ciudad> ciudades;
  private Ciudad ciudadSelected;
  private boolean bloquearBotones = true;

  @PostConstruct
  private void init() {
    ciudadSelected = new Ciudad();
    ciudades = DaoFactory.getCiudad().getCiudades();
  }

  public void clean() {
    this.descripcion = null;
    this.ciudadSelected = null;
    this.bloquearBotones = true;

  }

  public void addCiudad() {
    FacesContext context = FacesContext.getCurrentInstance();

    for (Ciudad ciu : ciudades) {

      if (ciu.getDescripcion().equals(descripcion)) {
        context.addMessage(null, new FacesMessage("Advertencia",
                                                  "La ciudad " + descripcion
                                                  + " ya se encuentra registrada"));
        this.clean();
        return;
      }
    }

    Ciudad ciudad = new Ciudad();
    ciudad.setDescripcion(descripcion);
    ciudad.setActivo(true);
    DaoFactory.getCiudad().addCiudad(ciudad);
    context.addMessage(null, new FacesMessage("Mensaje", "Ciudad "
                                              + descripcion + " almacenada exitosamente"));

    ciudades = DaoFactory.getCiudad().getCiudades();

    this.clean();
  }

  public void deleteCiudad() {
    //DaoFactory.getCiudad().deleteCiudad(this.getCiudadSelected().getId());
    Ciudad ciudad = DaoFactory.getCiudad().getCiudadById(
      this.getCiudadSelected().getId());
    FacesContext context = FacesContext.getCurrentInstance();
    ciudad.setDescripcion(descripcion);
    ciudad.setActivo(false);
    DaoFactory.getCiudad().updateCiudad(ciudad);
    context.addMessage(null, new FacesMessage("Mensaje", "Ciudad "
                                              + descripcion + " eliminada exitosamente"));

    ciudades = DaoFactory.getCiudad().getCiudades();
    this.clean();
  }

  public void editCiudad() {
    Ciudad ciudad = DaoFactory.getCiudad().getCiudadById(
      this.getCiudadSelected().getId());
    FacesContext context = FacesContext.getCurrentInstance();
    ciudad.setDescripcion(descripcion);
    DaoFactory.getCiudad().updateCiudad(ciudad);
    context.addMessage(null, new FacesMessage("Mensaje", "Ciudad "
                                              + descripcion + " almacenada exitosamente"));

    ciudades = DaoFactory.getCiudad().getCiudades();

    this.clean();
  }

  public void onRowSelect(SelectEvent event) {
    this.ciudadSelected = ((Ciudad) event.getObject());
    this.descripcion = this.ciudadSelected.getDescripcion();
    this.bloquearBotones = false;
    RequestContext.getCurrentInstance().update("ciudad-form:dtCiu");
  }

  public void guardarListener() {

  }

  public int getId() {
    return id;
  }

  public void setId(int id) {
    this.id = id;
  }

  public String getDescripcion() {
    return descripcion;
  }

  public void setDescripcion(String descripcion) {
    this.descripcion = descripcion;
  }

  public List<Ciudad> getCiudades() {
    ciudades = DaoFactory.getCiudad().getCiudades();
    return ciudades;
  }

  public void setCiudades(List<Ciudad> ciudades) {
    this.ciudades = ciudades;
  }

  public Ciudad getCiudadSelected() {
    return ciudadSelected;
  }

  public void setCiudadSelected(Ciudad ciudadSelected) {
    this.ciudadSelected = ciudadSelected;
  }

  public boolean isBloquearBotones() {
    return bloquearBotones;
  }

  public void setBloquearBotones(boolean bloquearBotones) {
    this.bloquearBotones = bloquearBotones;
  }
}
